package com.scott.template;

public abstract class Bevegrage {

    /**
     * 饮料机的制造流程，final修饰， 不能被重写，因为这就是模板
     */
    public final void create(){
        // 1：烧开水
        boilWater();

        // 2: 把被子准备好，原材料放入到杯子中
        pullMaterial();

        // 3：用水冲泡
        brew();

        // 4：添加辅料
        addOtherMaterial();

    }


    /**
     * 放辅料，
     * 但是不知道放什么材料，所以定义一个抽象的方法，让别人去实现该放什么
     */
    protected abstract void addOtherMaterial();

    /**
     * 冲泡，固定的 也不用特殊，直接实现
     */
    private void brew() {
        System.out.println(">>>>>>>>>    放水进去冲泡  <<<<<<<<<<");
    }

    /**
     * 放材料，
     * 但是不知道放什么材料，所以定义一个抽象的方法，让别人去实现该放什么
     */
    protected abstract void pullMaterial();

    /**
     * 烧开水，这个一个固定动作，没有什么特殊的，所以直接实现
     */
    private void boilWater() {
        System.out.println(">>>>>>>>>   烧开水，烧到100度   <<<<<<<<<<");
    }
}
